package com.pengli.mytools.greendao;

import android.content.Context;
import android.content.ContextWrapper;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import java.io.File;
import java.io.IOException;

/**
 * 用于自定义数据库存储路径：sd卡/databases/dbname
 */

public class DatabaseContext  extends ContextWrapper {
    public DatabaseContext(Context base) {
        super(base);
    }
    /**
     * 重写数据库路径，如果不存在，则自动创建
     */
    @Override
    public File getDatabasePath(String name) {
        //判断是否存在sd卡
        boolean sdExist = android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState());
        if(!sdExist){//如果不存在,
            Log.e("SD卡管理：", "SD卡不存在，请加载SD卡");
            return null;
        } else{//如果存在
            //获取sd卡路径
            String sdHomePath=android.os.Environment.getExternalStorageDirectory().toString();
//            File externalFilesDir = getExternalFilesDir(null);//SD卡默认可读写目录
            //数据库路径
            String dbDir =sdHomePath+ "/Android/data/com.pengli.mytools/databases";//数据库所在目录
            //判断数据库路径目录是否存在，不存在则创建该目录
            File dirFile = new File(dbDir);
            if(!dirFile.exists())
                dirFile.mkdirs();

            String dbFileName = dbDir+"/"+name;//数据库路径
            //判断文件是否存在，不存在则创建该文件
            File dbFile = new File(dbFileName);
            if (!dbFile.exists()){
                try {
                    boolean newFile = dbFile.createNewFile();
                    if (!newFile){
                        return null;
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return dbFile;
        }
    }

    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode,
                                               SQLiteDatabase.CursorFactory factory) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
        return result;
    }

    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory,
                                               DatabaseErrorHandler errorHandler) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
        return result;
    }
}